package com.lewis.module.m2.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.lewis.api.system.vo.GetOneVO;
import com.lewis.common.core.entity.BaseResult;
import com.lewis.common.core.utils.SpringUtil;
import com.lewis.module.m2.api.record.controller.RecordBotConfigFunctionController;
import lombok.extern.slf4j.Slf4j;

/**
 * 统一配置管理
 *
 * @author Lewis - 398529803@qq.com
 * @date 2021年11月16日, 016 - 15:32:50
 */
@Slf4j
public class ConfigJsonUtils {

	/**
	 * 获取返回的data
	 *
	 * @param functionName
	 * @param botQq
	 * @return
	 */
	public static JSONObject getResultData(String functionName, Long botQq) {
		BaseResult baseResult = SpringUtil.getBean(RecordBotConfigFunctionController.class).getOne(new GetOneVO(botQq, functionName));
		return (JSONObject) JSON.toJSON(baseResult.getData());
	}

	/**
	 * 获取接口基础url
	 * @param functionName
	 * @param botQq
	 * @return
	 */
	public static String getBaseUrl(String functionName, Long botQq) {
		JSONObject resultData = getResultData(functionName, botQq);
		return resultData.getString("baseUrl");
	}

	/**
	 * 获取功能配置JSON
	 *
	 * @param functionName
	 * @param botQq
	 * @return
	 */
	public static JSONObject getConfigJson(String functionName, Long botQq) {
		JSONObject resultData = getResultData(functionName, botQq);
		return resultData.getJSONObject("configJson");
	}

	/**
	 * 判断是否功能开启
	 *
	 * @param functionName
	 * @param botQq
	 * @return
	 */
	public static boolean getFunctionSwitchTrue(String functionName, Long botQq) {
		JSONObject resultData = getResultData(functionName, botQq);
		return resultData.getInteger("functionSwitch") == 1;
	}

	/**
	 * 根据功能名判断是否开启该功能
	 *
	 * @param functionName
	 * @param botQq
	 * @return
	 */
	public static boolean isFunctionSwitchStart(String functionName, Long botQq) {
		return getConfigJson(functionName, botQq).getInteger("functionSwitch") == 1;
	}

	/**
	 * 是否为功能管理员
	 *
	 * @param qq
	 * @param functionName
	 * @param botQq
	 * @return
	 */
	public static boolean isAdministrator(long qq, String functionName, Long botQq) {
		return getConfigJson(functionName, botQq).getJSONArray("administrator").contains(String.valueOf(qq));
	}

	/**
	 * 是否为分群列表一员
	 *
	 * @param groupId
	 * @param functionName
	 * @param botQq
	 * @return
	 */
	public static boolean isAllowGroupId(long groupId, String functionName, Long botQq) {
		JSONObject configJson = getConfigJson(functionName, botQq);
		return configJson.getJSONArray("groupIdList").contains(String.valueOf(groupId));
	}
}
